package com.sicheng.lc.lc笔试.美团篇;


import java.util.Scanner;

public class 明汉距离 {

    //https://leetcode-cn.com/circle/discuss/kr93zm/
    public static void main(String[] args) {
        // write your code here
        //时间限制： 3000MS
        //内存限制： 589824KB
        //题目描述：
        //小美有两个01串s,t。她想求s和t的所有长度等于 |s| 子串（连续）的汉明距离的和。
        //
        //即，她想知道汉明距离（ti , s），其中 ti 指第 i 个字符开始的长度为|s|的子串
        //
        //对于等长01串a, b, 他们之间汉明距离的定义是
        //
        //
        //
        //输入描述
        //对于每一组数据，包含两行数据，第一行是s, 第二行是t;
        //
        //1≤|s|≤|t|≤50000
        //
        //输出描述
        //输出一个整数，表示汉明距离的和。
        //
        //
        //样例输入
//        01
//        00111
        //样例输出
        //3
        //
        //提示
        //样例解释
        //
        //01和00的汉明距离为1，和01距离为0，和11距离为1，t中包含1个00，1个01，2个11，故距离和为3


        //leetcode dalao的大致思路
        //以 01 00111举例
//        01---00,01,11,11进行对应位置的差的绝对值累加
//        00111===>00,01,11,11可以看成是从t串中不断向右滑动得到的(并且滑动的时候包含的子串长度就是s的长度)
//        只看滑动过程的对应位置====
//        01的0和(00,01,11,11)的起始为作差的绝对值       ===0 分别和0011做了差的绝对值累加
//        01的1和(00,01,11,11)的第二个位置也做了差的绝对值 ===1 分别和0111做了差的绝对值累加
//
//
//
//      对于二进制而言
//      |x-0|=x,  ===== (|1-0|=1,|0-0|=0)
//      |x-1|=!x  ===== (|1-1|=!1=0 非1 ,|0-1|=1=1 非0 )
//
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        String t = scanner.nextLine();
        //前缀和
        int[] c0 = new int[t.length() + 1];
        //取反前缀和
        int[] c1 = new int[t.length() + 1];
        for (int i = 1; i <= t.length(); i++) {
            c0[i] = c0[i - 1] + t.charAt(i - 1) - '0';
            c1[i] = c1[i - 1] + '1' - t.charAt(i - 1);
        }

        long res = 0;
        int len = t.length() - s.length() + 1;
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i - 1) == '0')
                res += get(i, c0, len);
            else
                res += get(i, c1, len);
        }
        System.out.println(res);

    }

    private static long get(int i, int[] c, int len) {
        return c[i - 1 + len] - c[i - 1];
    }
}
